package com.ndp.fb.mongo.api;


import com.ndp.fb.model.AdResourceComment;
import com.ndp.fb.model.AdResourceStats;
import com.ndp.fb.model.business.vo.stats.AdResourceStatsQueryParam;
import com.ndp.fb.mongo.model.UserAdResourceStats;

import java.util.List;
import java.util.Map;
import java.util.Set;


public interface AdResourceStatsMongoService {
    /**
     * 根据指定字段更新
     *
     * @param adResourceStatsList 需要保存的数据
     * @param where               匹配字段
     */
    void batchSaveByWhereWithoutHistory(List<AdResourceStats> adResourceStatsList, String[] where);

    /**
     * 根据指定字段更新
     *
     * @param adResourceStatsList 需要保存的数据
     * @param where               匹配字段
     */
    void batchIncreaseByWhereWithoutHistory(List<AdResourceStats> adResourceStatsList, String[] where);


    /**
     * 根据MongodbId查询
     *
     * @param mongodbId mongodbId
     * @return 查询结果
     */
    AdResourceStats findByMongodbId(String mongodbId);

    List<AdResourceStats> findALL1970();

    /**
     * 根据MongodbId查询 批量查询
     *
     * @param mongodbIds
     * @return
     */
    List<AdResourceStats> findByMongodbIds(List<String> mongodbIds);


    String findMd5ByVistPath(String path);

    /**
     * 根据图片的md5汇总素材数据-明细数据
     *
     * @param adResourceStatsQueryParam 查询参数
     *                                  userIdSet           根据图片所有者检索的过滤条件（非必须项）
     *                                  accountIdSet        图片所有者或者公司的所有广告账号（非必须项，如果需要统计数据则此项为必须）
     *                                  resourceType        素材类型（非必须项），取值范围CommonConstants.RESOURCE_TYPE_IMAGE和CommonConstants.RESOURCE_TYPE_VIDEO
     *                                  orgId               根据公司检索的过滤条件（非必须项）
     *                                  tags                标签过滤条件（非必须项）
     *                                  startDay            统计开始日（非必须项，如果需要统计数据则此项为必须），包含该天
     *                                  endDay              统计截止日（非必须项，如果需要统计数据则此项为必须），包含该天
     *                                  sortList            排序字段及排序类型列表（支持多字段排序），List中每个元素是一个Map，Map的Key是排序字段，Map的Value是排序类型（1为升序，-1为降序）
     *                                  page                查询第几页（非必须项），从1开始，如果分页查询时为必须项
     *                                  pageSize            每页的数量（非必须项），如果分页查询时为必须项
     *                                  returnStatsFields   需要返回的字段（必须项），取值范围["cost","ctr","cr","clicks","impressions","results","socialClicks","socialImpressions","socialSpent","socialUniqueClicks","socialUniqueImpressions","spent","uniqueClicks","uniqueImpressions","mongodbId","createTime","height","isDelete","litImgURL","litNfsId","name","nfsId","orgId","resourceType","tags","uploadStatus","userIdSet","visitPath","width"]
     * @return 统计结果
     */
    Map<String, Object> groupByImageHash(AdResourceStatsQueryParam adResourceStatsQueryParam);

    /**
     * 1. 修改文件名称
     * 2. tag只是新增 不是覆盖
     * <p/>
     * appendTag true 追加tag
     * appendTag false 替换掉原来的tag
     *
     * @param mongodbId
     * @param fileName
     * @param tags
     * @param appendTag
     */
    void updateNameAndTags(String mongodbId, String fileName, Integer reviewStatus, String reviewer, Map<String, List> tags, boolean appendTag);

    /**
     * 给第三方提交图片增加评语
     *
     * @Author add by evan
     */
    void updateAdImageComment(String mongodbId, AdResourceComment comment);

    void updateReviewStatus(String mongodbId, Integer reviewStatus, String adReviewFeedback, Integer machineCnt);

    void batchUpdateReviewsTotalOfPageViews(List<AdResourceStats> adResourceStatses);

    void updateCountPageViews(String userId, String mongodId, Long numOfPageViews, Long peopleNumOfPageViews);

    void batchUpdateReviewStatus(List<String> mongodbIds, Integer reviewStatus);

    void removeByAccountIdAndDay(Long accountId, String day);

    List<AdResourceStats> AdimagesAllListMonByimageBathId(String imageBathId);

    /**
     * 查询第三方设计师上传的未审核的图片
     *
     * @return 返回第三方设计师上传的未审核图片
     */
    List<AdResourceStats> findUnReviewedImagesUploadByOutUi(int limit, String[] returnFields);

    /**
     * 统计第三方设计师上传的未审核的图片的个数
     *
     * @return 返回第三方设计师上传的未审核的图片的个数
     */
    long countUnReviewedImagesUploadByOutUi();

    /**
     * 获取本地上传的图片的hash值
     *
     * @param md5
     * @return
     */
    String getImageHashbyMd5(String md5);

    /**
     * 获取本地上传的图片的hash值
     *
     * @param md5
     * @return
     */
    List<AdResourceStats> getAdResourceImageHashIsNull();

    void updateHashbyMongodbId(String mongodbId, String hash);

    void deleteAdImages(String userId, List<String> mongodbIds);

    void updateMap(String mongodbId, Map<String, Object> map);


    List<AdResourceStats> getImageStatsGroupByBreakdowns(String imageHash, String since, String until, String breakdowns, boolean onlyNew, Set<Long> accountSet, Set<Long> fbConnectionObjectIds);
    
    List<UserAdResourceStats> getImageStatsGroupByUser();
}
